package org.n3r.idworker;

import org.n3r.idworker.strategy.DefaultWorkerIdStrategy;

public class Id {
	private static WorkerIdStrategy workerIdStrategy;
	private static IdWorker idWorker;

	static {
		configure(DefaultWorkerIdStrategy.instance);
	}

	public static synchronized void configure(WorkerIdStrategy custom) {
		if (workerIdStrategy == custom)
			return;

		if (workerIdStrategy != null)
			workerIdStrategy.release();
		workerIdStrategy = custom;
		workerIdStrategy.initialize();
		idWorker = new IdWorker(workerIdStrategy.availableWorkerId());
	}

	public static long next() {
		return idWorker.nextId();
	}

	public static long getWorkerId() {
		return idWorker.getWorkerId();
	}
}
